package qi

import (
	"encoding/json"
	"fmt"
	"strings"
	"time"
)

func any_到文本(任意数据 any) (返回_值 string) {
	if 任意数据 == nil {
		return
	}
	switch 当前值 := 任意数据.(type) {
	case string:
		返回_值 = 当前值
		return
	case time.Time:
		返回_值 = 当前值.Format("2006-01-02 15:04:05")
		return
	case map[string]any:
		转换表 := any_到文本的数据处理(当前值)
		JSON, err := json.Marshal(转换表)
		if err != nil {
			返回_值 = "{}"
			return
		}
		返回_值 = string(JSON)
		return
	case []any:
		转换表 := any_到文本的数据处理(当前值)
		JSON, err := json.Marshal(转换表)
		if err != nil {
			返回_值 = "[]"
			return
		}
		返回_值 = string(JSON)
		return
	case []map[string]any:
		转换表 := any_到文本的数据处理(当前值)
		JSON, err := json.Marshal(转换表)
		if err != nil {
			返回_值 = "[]"
			return
		}
		返回_值 = string(JSON)
		return
	case []byte:
		返回_值 = string(当前值)
		return
	default:
		返回_值 = fmt.Sprintf("%v", 任意数据)
		return
	}
}

// 处理 any_到文本里 map 切片立 时间类型 和[]byte 类型的处理
func any_到文本的数据处理(原始数据 any) (返回_值 any) {
	if 条件map, ok := 原始数据.(map[string]any); ok {
		新map := make(map[string]any)
		for k, v := range 条件map {
			switch 当前值 := v.(type) {
			case time.Time:
				新map[k] = any_到文本的数据处理(当前值.Format("2006-01-02 15:04:05"))
			case []byte:
				新map[k] = any_到文本的数据处理(string(当前值))

			default:
				新map[k] = any_到文本的数据处理(v)

			}
		}
		返回_值 = 新map
		return
	} else if 条件切片, ok := 原始数据.([]any); ok {
		新切片 := make([]any, len(条件切片))
		for k, v := range 条件切片 {
			switch 当前值 := v.(type) {
			case time.Time:
				新切片[k] = any_到文本的数据处理(当前值.Format("2006-01-02 15:04:05"))
			case []byte:
				新切片[k] = any_到文本的数据处理(string(当前值))

			default:
				新切片[k] = any_到文本的数据处理(v)

			}
		}
		返回_值 = 新切片
		return
	}
	返回_值 = 原始数据
	return
}

func c_创建文本(原始文本 string,赋值次数 int, 对应文本 ...any) (返回值 string) {
	赋值次数++
	if 赋值次数>len(对应文本){
		返回值=原始文本
		return
	}
	
	分割符 := "{" + fmt.Sprintf("%v", 赋值次数) + "}"
	分割组 := strings.Split(原始文本, 分割符)
	for i, v := range 分割组 {
		分割组[i]= c_创建文本(v,赋值次数,对应文本...)
	}
	返回值= strings.Join(分割组, any_到文本(对应文本[赋值次数-1]))
	return
}
